package com.bw.park2301.notice

import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import com.bw.lib_base.entity.NoticeBeanItem
import com.bw.lib_base.mvvm.BaseViewModel
import com.bw.lib_base.net.ApiService
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject

// 使用Hilt注解标记此ViewModel类，以便于使用Hilt进行依赖注入
@HiltViewModel
// NoticeViewModel类构造函数中的apiService参数将通过依赖注入提供
class NoticeViewModel @Inject constructor(val apiService: ApiService): BaseViewModel() {
    /**
     * 获取公告信息列表
     *
     * 此函数使用分页配置和数据源工厂来获取公告数据
     * 它返回一个Flow对象，该对象发出PagingData类型的公告信息项
     *
     * @return Flow<PagingData<NoticeBeanItem>> 分页公告数据流
     */
    fun getNotice():Flow<PagingData<NoticeBeanItem>>{
        // 创建并配置Pager对象，定义分页获取公告数据的逻辑
        return Pager(config = PagingConfig(pageSize = 10), pagingSourceFactory = {
            // NoticeDataSource是实际执行分页数据加载的源
            NoticeDataSource(apiService)
        }).flow.cachedIn(viewModelScope)
    }
}
